CC = arm-linux-gnueabihf-gcc # 指定使用的交叉编译工具
# CC = gcc # 指定使用的交叉编译工具

TARGET = file_transfer_client_linux # 生成的可执行文件名

# 支持C99标准 这里不要使用-std=c99，否则会报警告提示部分库函数未包含对应头文件
# pthread不是linux下的默认的库，如果这里不加-lpthread，则在链接的时候无法找到phread库中各函数的入口地址，链接会失败
CFLAGS = -std=gnu99 -lpthread

# 添加头文件路径
# CFLAGS += -I./open_source/include/zlib_1.2.11_include


# 链接器的链接参数设置
# LDFLAGS += -lz -L./open_source/lib/zlib_1.2.11_lib

# 获取各工程文件所在的相对目录
TOP_PATH = .
FILE_TRANSFER_PATH = ./file_transfer

# 获取工程中各文件夹下的源文件(.c)、目标文件(.o)的文件列表
TOP_SRC = $(wildcard $(TOP_PATH)/*.c) # 获取当前目录下的所有的.c文件列表
TOP_OBJ = $(patsubst %.c, %.o, $(TOP_SRC)) # 将列表中所有文件名的后缀.c替换为.o。这样就可以得到在当前目录可生成的.o文件列表。 patsubst ：替换通配符
FILE_TRANSFER_SRC = $(wildcard $(FILE_TRANSFER_PATH)/*.c)
FILE_TRANSFER_OBJ = $(patsubst %.c, %.o, $(FILE_TRANSFER_SRC))


# 所有目标文件的集合
TARGET_OBJS = $(TOP_OBJ) $(FILE_TRANSFER_OBJ) $(WRITE_LOG_OBJ)

# Makefile的默认目标
$(TARGET):$(TARGET_OBJS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $(TARGET) $^
	@echo "compile done, target file: $(TARGET)"

# 编译TOP_PATH下的.c文件 为.o文件
TOP_OBJ:$(TOP_SRC)
	$(CC) $(CFLAGS) $(LDFLAGS) $(TOP_SRC) -c -o $^

# 编译FILE_TRANSFER_PATH下的.c文件 为.o文件
FILE_TRANSFER_OBJ:$(FILE_TRANSFER_SRC)
	$(CC) $(CFLAGS) $(LDFLAGS) $(FILE_TRANSFER_SRC) -c -o $^

# 清理目标设置为伪目标，防止外面有clean文件 阻止执行clean
.PHONY:clean
clean:
	-$(RM) $(TARGET_OBJS)
	@echo "clean object file done!"

# 清理目标设置为伪目标
.PHONY:distclean
distclean:
	-$(RM) $(TARGET) $(TARGET_OBJS)
	@echo "clean target and object file done!"


